package app

import (
	"fmt"
)

// AppRun 启动应用程序
func AppRun() error {
	// 初始化日志
	flog, initLogErr := initLog()
	if initLogErr != nil {
		return fmt.Errorf("初始化日志失败: %s", initLogErr)
	}

	// 初始化数据库
	db, initDbErr := initDb()
	if initDbErr != nil {
		return fmt.Errorf("初始化数据库失败: %s", initDbErr)
	}

	// 捕获panic
	defer func() {
		if r := recover(); r != nil {
			flog.Errorf("程序发生了panic: %v", r)
		}
	}()

	// 注册关闭函数
	defer func() {
		// 关闭数据库
		if db != nil {
			if err := db.Close(); err != nil {
				flog.Errorf("关闭数据库时发生错误: %v", err)
			}
		}

		// 关闭日志
		if flog != nil {
			flog.Infof("程序结束运行，正在关闭日志...")
			flog.Close()
		}
	}()

	// 启动应用程序
	flog.Info("程序开始运行...")
	newApp, err := initUi(flog, db)
	if err != nil {
		flog.Errorf("初始化UI失败: %s", err)
		return fmt.Errorf("初始化UI失败: %s", err)
	}

	// 显示并运行应用程序
	newApp.ShowAndRun()

	return nil
}
